package com.linkhub.oms.admin.modules.user.service;

import com.linkhub.oms.admin.modules.system.domain.param.SystemSignUpParam;
import com.linkhub.oms.admin.modules.user.domain.dto.UserDTO;
import com.linkhub.oms.admin.modules.user.domain.param.MerchantBankCardModifyParam;
import com.linkhub.oms.admin.modules.user.domain.param.MerchantCompanyModifyParam;
import com.linkhub.oms.admin.modules.user.domain.param.MerchantCompanyModifyParamV2;
import com.linkhub.oms.admin.modules.user.domain.param.MerchantEditParam;
import com.linkhub.oms.admin.modules.user.domain.vo.MerchantPersonalInfoVO;
import com.linkhub.oms.admin.modules.user.domain.vo.UserInfoWrapper;

import javax.validation.Valid;
import java.util.List;

/**
 * @Description: UserBizService
 * @Author: echo
 * @Date: 2024/3/6 22:36
 * @Version: 1.0
 */
public interface UserBizService {

    /**
     * 通过用户id获取用户信息
     *
     * @param userId userId
     * @return
     */
    UserDTO getUserByUserId(String userId);

    /**
     * 通过邮箱获取用户
     *
     * @param email email
     * @return user
     */
    UserDTO getUserByEmail(String email);


    /**
     * 新增注册的客户
     *
     * @param signUpParam signUpParam
     */
    String addSignUpCustomer(SystemSignUpParam signUpParam);


    /**
     * 重置密码
     *
     * @param email    email
     * @param password password
     */
    void resetCipher(String email, String password);

    /**
     * 组装用户信息
     *
     * @return UserInfoWrapper
     */
    UserInfoWrapper assembleUserInfoInSaSession();

    /**
     * 查询所有商家列表
     *
     * @return users
     */
    List<UserDTO> listMerchants();


    /**
     * 更新商家信息
     *
     * @param editParam editParam
     */
    void updateUserInfo(MerchantEditParam editParam);


    /**
     * getUserPersonalInformation
     *
     * @param userId userId
     * @return personalInfo
     */
    MerchantPersonalInfoVO getUserPersonalInformation(String userId);

    /**
     * modifyCompany
     *
     * @param companyModifyParam companyModifyParam
     */
    void modifyCompany(MerchantCompanyModifyParam companyModifyParam);

    /**
     * modifyBankCard
     *
     * @param bankCardModifyParam bankCardModifyParam
     */
    void modifyBankCard(MerchantBankCardModifyParam bankCardModifyParam);

    /**
     * deleteCompany
     *
     * @param id id
     */
    void deleteCompany(Long id);

    /**
     * deleteBankCard
     *
     * @param id id
     */
    void deleteBankCard(Long id);

    void modifyCompanyV2( @Valid MerchantCompanyModifyParamV2 merchantCompanyModifyParamV2 );
}
